Lambdaのメモリ利用率をCloudWatchで可視化するmem2cw
渡辺です。 七夕ということで、Lambdaに役立つツールmem2cwを作成しました。
AWS Lambdaでは、メモリサイズと実行時間により利用費が算出されます。 無駄なコストを払わないためにも、最適なメモリ設定が必要です。 しかし、Lambdaで実際に利用しているメモリ量をモニターから確認することができません。 Lambdaのログで確認できます。 可視化したいので可視化してみました。
仕組み
Lambda実行時、CloudWatch Logsにログが出力されます。
この中に、次のようなログが含まれており、メモリ設定(Memory Size
)と利用メモリ(Max Memory Used
)を確認できます。
REPORT RequestId: 917ad15e-62b4-11e7-b9bc-xxxxxxxxx Duration: 4.77 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 39 MB
そこで、CloudWatch Logsのサブスクリプションとして、Lambdaを発火し、ログからメモリ使用率を求めて、CloudWatch Metricにデータを送信します。
利用方法
LambdaのコードはCloudFormationで作成しました。 GitHubからテンプレートファイルを取得し、CloudFormationのスタックを作成してください。 パラメータとして、CloudWatch Metricの名前空間を指定します。
Lambdaが作成できたならば、メモリ使用率を取得したいLambda関数のサブスクリプションにmem2cwを設定します。
メモリ利用率は、CloudWatchメトリクスから確認しましょう。
このLambdaでは、メモリ使用率は30%程度です。 メモリ設定をもう少し下げても問題なさそうですね。
実行時間に注意
メモリに余裕があるからといって、ギリギリに設定すると実行時間が長くなる可能性もあります。 実行時間もあわせて確認し、チューニングを行ってください。
まとめ
EC2に比べ、Lambdaのコストは小さいですが、より安く使えれば幸いです。